const fp = require("lodash/fp");
class IO {
    static of(value) {
        return new IO(function () {
            return value;
        });
    }
    constructor(fn) {
        this._value = fn;
    }
    map(fn) {
        // 把当前的value和传入的fn组合成一个新的函数 这里可能是不纯的,这里的函数延迟到调用的时候
        return new IO(fp.flowRight(fn, this._value));
    }
}
// 这里始终会返回一个IO的函子
const r = IO.of(process).map((x) => x.execPath);

console.log(r);
console.log(r._value());
